#ifndef __PINTYPE_H
#define __PINTYPE_H

#include "stdint.h"

#ifdef __cplusplus
extern "C"
{
#endif

/*******************************************************************************
 * @brief   DIR
 *******************************************************************************/
#define PIN_MODE_IN_UP 0x01
#define PIN_MODE_IN_DN 0x02
#define PIN_MODE_IN_FLOAT 0x03
#define PIN_MODE_IN_AIN 0x04

// 低速，中速，高速
#define PIN_MODE_OUT_SL_PP 0x11
#define PIN_MODE_OUT_SL_OD 0x12
#define PIN_MODE_OUT_SM_PP 0x13
#define PIN_MODE_OUT_SM_OD 0x14
#define PIN_MODE_OUT_SH_PP 0x15
#define PIN_MODE_OUT_SH_OD 0x16

#define PIN_MODE_OUT_PP PIN_MODE_OUT_SH_PP
#define PIN_MODE_OUT_OD PIN_MODE_OUT_SH_OD

/*******************************************************************************
 * @brief   简易
 *******************************************************************************/
typedef struct
{
	void (*en)(void);
	void (*dis)(void);
	void (*out)(uint8_t st);
	uint8_t (*out_st)(void);
	uint8_t (*in_st)(void);
} port_simp_pin_type;

/*******************************************************************************
 * @brief   通用
 *******************************************************************************/
typedef struct
{
	void (*en)(void);
	void (*dis)(void);
	void (*out)(uint8_t st);
	void (*tog)(void);
	uint8_t (*out_st)(void);
	uint8_t (*in_st)(void);
	void (*mode)(char pm); // 模式
} port_fun_pin_type;

/*******************************************************************************
 * @brief   通用
 *******************************************************************************/
typedef struct
{
	void (*en)(void);
	void (*dis)(void);
	void (*out)(uint8_t st);
	void (*tog)(void);
	uint8_t (*out_st)(void);
	uint8_t (*in_st)(void);
	void (*dir_in_ft)(void);  // 浮空输入
	void (*dir_in_up)(void);  // 上拉输入
	void (*dir_out_pp)(void); // 推挽输出
	void (*dir_out_od)(void); // 开漏输出
} port_io_pin_type;

/*******************************************************************************
 * @brief   输出
 *******************************************************************************/
typedef struct
{
	void (*en)(void);
	void (*dis)(void);
	void (*out)(uint8_t st);
	void (*tog)(void);
	uint8_t (*out_st)(void);
	void (*dir_out_pp)(void); // 推挽输出
	void (*dir_out_od)(void); // 开漏输出
} port_out_pin_type;

/*******************************************************************************
 * @brief   输入
 *******************************************************************************/
typedef struct
{
	uint8_t (*in_st)(void);
	void (*dir_in_ft)(void); // 浮空输入
	void (*dir_in_up)(void); // 上拉输入
	void (*dir_in_dn)(void); // 下拉输入
} port_in_pin_type;

#ifdef __cplusplus
}
#endif


#endif
